Node.js 是一个开源、跨平台的 JavaScript 运行时环境,它让开发人员能够创建服务器、Web 应用、命令行工具和脚本
cluster 模块使用多线程![[Pasted image 20240925173655.png]]
http、fs、request 等lib 模块的 C++ 类接口,这一层是 JavaScript 与底层 C/C++ 沟通的桥梁,由 C/C++ 编写Node.js 同时支持 CommonJS 和 ES 模块系统(自 Node.js V12 起)
CJSESMNode.js 默认使用 cjs,如果使用 ES Module 需要将文件名改成 xxx.mjs
所以 Node.js 没有 document、window 等浏览器提供的 API,但有其他模块,如文件系统等
ECMAScript 功能分为三组,分别是发布(shipping)、暂存(staged)、进行中(in progress)
--harmonyNode.js 中的开发和生产之间没有区别,即:无需应用任何特定设置即可使 Node.js 在生产配置中工作
但是很多 Node.js 库通过 NODE_ENV 环境变量,区分开发环境与生产环境,以进行不同逻辑处理。如 express 中,将 NODE_ENV 设置为 production 通常可以确保:
注意:NODE_ENV 环境变量是外部库中广泛使用的约定,但 Node.js 本身并未使用
修改 NODE_ENV 环境变量的方法:
export NODE_ENV=production.bash_profile 文件NODE_ENV=production node app.jsNode.js 程序读取:
if (process.env.NODE_ENV === 'development') {
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
}
if (process.env.NODE_ENV === 'production') {
app.use(express.errorHandler());
}
WebAssembly 是一种高性能的类汇编语言,可以从多种语言进行编译,如 C/C++、Rust、AssemblyScript 等。目前,Chrome、Firefox、Safari、Edge 和 Node.js 都支持它
WebAssembly 规范详细介绍了两种文件格式:
.wasm 的二进制格式.wat 的文本表示形式有多种方法可用于生成 WebAssembly 二进制文件,包括:
.wat) 并使用 wabt 等工具转换为二进制格式其中一些工具不仅生成二进制文件,还生成 JavaScript “粘合”代码以在浏览器中运行
Node.js 通过全局 WebAssembly 对象提供必要的 API
console.log(WebAssembly);
/*
Object [WebAssembly] {
compile: [Function: compile],
validate: [Function: validate],
instantiate: [Function: instantiate]
}
*/
const fs = require('node:fs');
const wasmBuffer = fs.readFileSync('/path/to/add.wasm');
WebAssembly.instantiate(wasmBuffer).then(wasmModule => {
const { add } = wasmModule.instance.exports;
const sum = add(5, 6);
console.log(sum); // 11
});
WebAssembly 模块本身无法直接访问操作系统功能。可以使用第三方工具 Wasmtime 来访问此功能,其利用 WASI API 来访问操作系统功能
tscnpm i -D typescript
npx tsc example.ts
node example.js
ts-nodenpm i -D ts-node
npx ts-node example.ts
从 V22.6.0 开始,Node.js 对某些 TypeScript 语法提供了实验性支持。可以直接在 Node.js 中编写有效的 TypeScript 代码,而无需先进行转译
node --experimental-strip-types example.ts
--experimental-strip-types 标志告诉 Node.js 在运行 TypeScript 代码之前删除类型注释
node --inspect app.js
使用 --inspect 标记启用调试模式,Node.js 进程会侦听调试客户端。默认情况下,它将侦听 127.0.0.1:9229。每个进程还被分配了一个唯一的 UUID
Inspector 客户端必须知道并指定要连接的主机地址、端口和 UUID。完整的 URL 看起来像 ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e